package spring.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.HttpRequestHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * https://blog.csdn.net/f641385712/article/details/89845181
 * HttpRequestHandler 用于处理 Http requests，其类似于一个简单的 Servlet，只有一个 handlerRequest 方法，其处理逻辑随子类的实现不同而不同。
 * 它是 Spring2.0 后才出来的，用于处理 HTTP 请求的组件的纯处理程序接口，类似于 servlet
 * <p>
 * DefaultServletHttpRequestHandler 和 ResourceHttpRequestHandler 和 Spring MVC 处理静态资源有非常大的关系。
 * 如果将 DispatcherServlet 请求映射配置为"/"，则 Spring MVC 将捕获 Web容器所有的请求，
 * 包括静态资源的请求，Spring MVC 会将它们当成一个普通请求处理，因此找不到对应处理器将导致错误。
 * 优雅 REST 风格的资源 URL不希望带 .html 或 .do 等后缀，由于早期的 Spring MVC 不能很好地处理静态资源，所以在 web.xml 中
 * 配置 DispatcherServlet 的请求映射，往往使用 *.do 、 *.xhtml 等方式。
 */
@Controller("/demoHttpRequestHandler")
public class My_04_HttpRequestHandler implements HttpRequestHandler {
    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("this my DemoHttpRequestHandler");
        response.getWriter().write("this my DemoHttpRequestHandler");
    }
}

// 使用方式几乎如出一辙。HttpRequestHandler 类似于一个简单的 Servlet
// @WebServlet("/myServlet")
// public class MyServlet extends HttpServlet {
//     @Override
//     protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//         super.service(req, resp);
//     }
// }
